查看原文
其他

气炸!又一次被编辑器坑了!

鱼皮 程序员鱼皮 2022-08-14

来看看你中过这招么?

大家好,我是鱼皮。

最近工作比较忙碌,做完技术选型后,这两周开始上手开发了。首先是用 Java 数据访问框架对接 PgSQL,本来以为至多半个小时就能搞定了,结果没想到,我竟然被编辑器给坑了!耽误了好一会儿。

把被坑的经历分享出来,希望大家引以为戒。

踩坑

我选用的是 MyBatis 框架,来实现在 Java 中操作 PgSQL 数据库。

该框架需要读取 xml 配置文件来实现对象关系映射,看了一下项目目录,惊喜地发现之前有同事已经接入了 MyBatis,并且写好了一份配置文件。

已有配置文件如下:

既然有现成的,那我只需要有样学样,复制粘贴即可。于是,遵循同事取包名的风格,我新建了一个目录:

然后把配置文件复制过去,略作修改即可,当前目录如下:

搞定配置文件后,就可以试着读取它,连接下数据库。再次惊喜地发现同事已经编写好了一个测试类,代码如下:

public static void main(String[] args) {
  DatabaseClient pg = new DatabaseClient(
    // 数据库属性文件
  "db.properties",
    // 编写的配置文件
  "aaa/config/sql-map-config.xml"
  );
}

之前的同事测试的是 aaa/config 配置文件,那我只需要把 aaa 改成 bbb,不就可以连接成功了么?

运行!

呕豁,报错了,说是找不到文件?

奇怪了,文件明明存在啊?大家来帮忙找找茬,到底是哪里出现了问题呢?

排坑

下面来排排坑吧,首先我研究了一会儿 aaabbb 目录下配置文件的差异,结果完全找不出问题。

好吧,是我傻了,出了 bug 要从报错信息查起。既然说找不到文件,那就看一下构建目录中配置文件是否有被打包进去。

这一看,果然查出问题了,构建目录如下:

大家发现了差异了么,aaa/config 是两个独立的目录,对应两个 Java 的包;而 bbb.config 根本就是一个目录,只不过目录名称中正好出现了包名的点分隔符!

所以 bbb.config 的配置文件路径应该是 bbb.config/sql-map-config.xml,而不是 bbb/config/sql-map-config.xml

唉,原来是中了开发工具的 “障眼法”,在 JetBrains 全家桶中,有一个视图设置,当包中没有文件时,会对中间包进行折叠。

所以最初我建目录的时候,就应该先建立 bbb 目录,再在 bbb 下建立 config目录,形成嵌套包,而不是直接建了一个名称为 bbb.config 的目录。

这个微小的差别如果不进入构建目录,是根本发现不了的。

表面上看不出区别

虽然这个问题归根到底是由自己的粗心导致的,但也值得记录下来,防止以后遇到类似的错误。


就是这样,希望大家以后在使用编辑器的时候多个心眼儿,不要完全相信它!

往期推荐

我工作中不可或缺的宝贝们!

腾讯二面,我被 “赛马” 问题难住了

小知识,啥是热数据探测?

您可能也对以下帖子感兴趣

文章有问题?点此查看未经处理的缓存